/* Nama File : segiempat.cpp                         */
/* Deskripsi : Implementasi dari class SegiEmpat     */
/* Anggota Kelompok : Dekha Anggareska 13510050		*/
/*                    Fadhil Muhtadin 13510070		*/
/*                    Muhammad Iqbal 13510064		*/
/*                    Yulius Nainggolan 13510090	*/

#include "segiempat.h"
#include <iostream>
using namespace std;

	SegiEmpat::SegiEmpat() : Bidang(4) 
	/* Konstruktor SegiEmpat */
	/* I.S. SegiEmpat belum tercipta */
	/* F.S. SegiEmpat tercipta */
	{
    cout << "SegiEmpat ctor" << endl;
    }

	SegiEmpat::SegiEmpat(Cell Cbr, Cell B, Cell C, Cell D) : Bidang(4) 
	/* Konstruktor SegiEmpat dengan parameter */
	/* I.S. SegiEmpat belum tercipta */
	/* F.S. SegiEmpat tercipta */
	{
     if (Cbr.IsDownRight(B))
	 {
		SetBottomRight(B);
	 }
	 else if (Cbr.IsDownRight(C))
	 {
		SetBottomRight(C);
	 }
	 else if (Cbr.IsDownRight(D))
	 {
		SetBottomRight(D);
	 }
	 SetTopLeft(Cbr);
	 cout << "TL: " << GetTopLeft().getX() << "," << GetTopLeft().getY() << endl;
	 cout << "BR: " << GetBottomRight().getX() << "," << GetBottomRight().getY() << endl;
    }

	SegiEmpat::SegiEmpat(const SegiEmpat& BS) : Bidang(BS.getSudut()) 
	/* CCtor SegiEmpat */
	/* I.S. SegiEmpat terdefinisi */
	/* F.S. SegiEmpat baru tercipta sebagai kopi SegiEmpat sebelumnya */
	{
		SetTopLeft(BS.GetTopLeft());
	};

	SegiEmpat::~SegiEmpat() 
	/* Destruktor SegiEmpat */
	/* I.S. SegiEmpat terdefinisi */
	/* F.S. SegiEmpat dimusnahkan */
	{
    cout << "SegiEmpat dtor" << endl;
    }

	SegiEmpat& SegiEmpat::operator=(const SegiEmpat& BS) 
	/* operator assignment SegiEmpat */
	/* I.S. SegiEmpat input terdefinisi */
	/* F.S. SegiEmpat output sama dengan input dengan alokasi memori tersendiri */
	{
		setSudut(BS.getSudut());
		SetTopLeft(BS.GetTopLeft());
		SetBottomRight(BS.GetBottomRight());
		// cout << "assignment Bidang" << endl;
		return *this;
    }

    /* Getter & Setter */
    void SegiEmpat::SetTopLeft(Cell C1) 
	/* Mengeset TL dengan Cell input */
	/* I.S. SegiEmpat terdefinisi */
	/* F.S. TL sama dengan Cell input */
	{
		TL = C1;
	}
    void SegiEmpat::SetBottomRight(Cell C2) 
	/* Mengeset BR dengan Cell input */
	/* I.S. SegiEmpat terdefinisi */
	/* F.S. BR sama dengan Cell input */
	{
		BR = C2;
	}

    Cell SegiEmpat::GetTopLeft() const 
	/* Mengembalikan nilai TL */
	{
        return TL;
    }
    Cell SegiEmpat::GetBottomRight() const 
	/* Mengembalikan nilai BR */
	{
        return BR;
    }
	
	void SegiEmpat::setCorner(int i, Cell Ci) 
	/* Mengeset cell titik sudut dengan cell input, HANYA UNTUK POLYGON */
	/* I.S. SegiEmpat terdefinisi */
	/* F.S. Sama dengan I.S. */
	{
		cout << "Error setCorner SegiEmpat" << endl;
	}
	
	int SegiEmpat::isPointInside(Cell PS) 
	/* Mengembalikan 1 bila Cell input berada dalam SegiEmpat, 0 bila tidak */
	{
		cout << "cek inside" << endl;
		cout << "BR: " << GetBottomRight().getX() << "," << GetBottomRight().getY() << endl;
		cout << "TL: " << GetTopLeft().getX() << "," << GetTopLeft().getY() << endl;
		return ((PS.getX() <= GetBottomRight().getX()) && (PS.getX() >= GetTopLeft().getX()) && (PS.getY() <= GetTopLeft().getY()) && (PS.getY() >= GetBottomRight().getY()));
	};

